<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>01_def</title>
	<meta name="author" content="Stark" />
	<!-- Date: 2018-10-18 -->
	<script type="text/javascript">
		// 第一种定义方式
		function fn1() {
			alert("fn1");
		}
		// 函数就是一个非常特殊的对象，是一个Function类的实例，其实在内存中存储的操作是通过一个键值对来存储的
		// alert(typeof(fn1));
		
		// 由于函数是一个对象，所以可以通过如下方式定义
		// 以下是用过函数的拷贝来完成赋值 的，两个引用并没有指向同一个对象
		var fn2 = fn1;
		fn2();
		fn1 = function() {
			alert("fnn1");
		}
		/**
		 * 函数虽然是一个对象，却和对象有一些区别，对象是通过引用的指向完成对象的赋值的，而函数却是通过对象的拷贝来完成的
		 * 所以fn1虽然变量，并不会影响fn2
		 */
		fn2();
		fn1();
		
		/**
		 * 对于对象而言是通过引用的指向来完成赋值的，此时修改o1或者o2将会将两个的值都修改
		 */
		var o1 = new Object();
		var o2 = o1;
		o2.name="leno";
		alert(o1.name);
	</script>
</head>
<body>
	
</body>
</html>

